さくらのvpsを弄ってみた話

# はじめに
この記事は[東京高専プロコンゼミ① Advent Calendar 2022](https://adventar.org/calendars/8370)の13日目の記事です．
※12/17日に書き始めましたが13日目の記事です（四日遅れ）
※記事を書きながら資料を読みながら動かしてみています。許して

# それだけの話
今回たまたまさくらのvpsを使う機会ができたので、記事を書きます。

## 開始
https://knowledge.sakura.ad.jp/7938/
まず、公式チュートリアルを進めていきます。

公式のサーバー管理ページに入ってログインすると、大抵ブラウザからssh接続でコンソールに接続できるので、`PuTTY`は使う必要はないと思います。

コンソールに接続して`cent os 9`のuserに（初めて）ログインしようとしたらログインできなかったので（契約してから半月以上は経ってる）、OSを再インストールして、ログインに成功します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/890310/daebf1c1-add7-a113-d71e-b861041459c6.png)

## 試しにサーバーにアクセスさせる!
今回は`scratchattach`という`scratch`に`python`でアクセスするやつを使ってみます

https://github.com/TimMcCool/scratchattach

```console
$ sudo yum install python-pip
```

まず`pip`が無かったのでinstallします。
`python`はデフォルトであるらしいのでほっときます。

```console
$pip install -U scratchattach
```
次に`pip`で`scratchattach`を入れます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/890310/b490c809-5d73-ffc2-efc0-3dbbf153af56.png)

```console
$ vi test.py
```
で適当にtest.pyというファイルを作り、
```python:test.py
import scratchattach as scratch3
# session = scratch3.login("oligami", "********") # 自分のパスワード
# なぜか失敗したのでsessionIdを使います。※cookieに保存されている奴 
session = scratch3.Session("********", username="oligami") # sessionIdはバカ長いです
conn = session.connect_cloud("767766792") # project_id
# https://scratch.mit.edu/projects/767766792/
variables = scratch3.get_cloud("767766792") # Returns a dict with all cloud var values
for name in variables.keys():
    value = variables[name]
    print("name: {}, value: {}".format(name, value))
    conn.set_var(name, "-0123456789")
conn.disconnect()
```
pythonは普段書かなくて不安なので、[colab](https://colab.research.google.com/drive/10zi4qLin6OydRlUity9QlFMjyrikAr2z?usp=sharing)で試した後確認すると成功していました。 ※[log](https://scratch.mit.edu/cloudmonitor/767766792/)
次に`vi`でこれを打ち込んだファイルを作ります。 

```console
[oligami@tk2-116-58904 python]$ vi scratchattach_test.py
[oligami@tk2-116-58904 python]$ python scratchattach_test.py
name: あいうえお, value: -0123456789
name: お, value: -0123456789
name: あああ, value: -0123456789
name: あああああ, value: -0123456789
name: お久しぶりです, value: -0123456789
name: いいいい, value: -0123456789
name: 上限テスト2, value: -0123456789
name: 上限テスト3, value: -0123456789
name: 上限テスト4, value: -0123456789
name: 上限テスト5, value: -0123456789
name: 上限テスト6, value: -0123456789
name: にちは, value: -0123456789
name: akura_nekoさん。やっぱり先人はいるものなんですね…, value: -0123456789
name: 上限テスト7, value: -0123456789
name: 上限テスト8, value: -0123456789
name: 上限テスト9, value: -0123456789
name: 上限テスト10, value: -0123456789
name: り内部での最初の10個しかプロジェクト内から変更できないか…, value: -0123456789
name:, value: -0123456789
```
成功しましたね。
[log](https://scratch.mit.edu/cloudmonitor/767766792/)もしっかり更新されています。 

ちなみにこれでscratchのクラウド変数にアクセスできるので、サーバーを一つ用いることでscratchにリアルとサーバー越しに通信させることが可能です。ソケット技術とか言うのですが、地震レーダーの作品とかあった気がします。

# 次に簡単なサイトを作ります。

チュートリアルに従って`Apache`を入れます。
```console
$ sudo yum install httpd
```
※httpdはcent osでのapacheらしい
次にhttpdを起動します
```console
systemctl start httpd
```
```console
$ sudo firewall-cmd --add-service=http --zone=public --permanent
$ sudo firewall-cmd --add-service=https --zone=public --permanent
```
ファイアウォールを何とかします。
```console
$ sudo firewall-cmd --add-service=http --zone=public --permanent
```
ファイアウォールを再起動します。
ここで試しにサイトにアクセスするのですが、できません。困りましたね。 

もしかしたらsudoではなくrootユーザーからやらなければいけなかったのかもしれません。

※rootのpassがわからず苦労しましたが（50分悪戦苦闘した）、ついにできたのでrootでやります。

結果、何も変わりませんでした。

結局、パケットフィルタの設定で「Web(80/443)」を許可したらめっちゃ一瞬で読み込まれて超絶ビビりました。

そしてそのまま進めて`Hello World`とだけ表示されたindex.htmlを表示させることに成功しました。
 
## この記事を表示
https://blog.fenrir-inc.com/jp/2012/05/github_markdown.html

このサイトをパクり、

https://michelf.ca/projects/php-markdown/

phpの元サイトが更新されていたため適当に修正し、実際におこなってみます。

そしてよくわからない文字化けで終わりました。
markdownも認識されていなさそうだし、日本語は文字化けしています。
もう眠いのでここまで！！
続きはまたいつか！
だれかがダメなところ指摘してくれたら続きかくかも！！

最後にphpの中身
```php:md.php
<?php
require_once 'Michelf/Markdown.inc.php';
require_once 'Michelf/MarkdownExtra.inc.php';

if ( isset($_SERVER&#91;'PATH_TRANSLATED'&#93;) ) {
    $file = realpath($_SERVER&#91;'PATH_TRANSLATED'&#93;);
    $ext = substr($file, strrpos($file, '.') + 1);
}

if ( $file and is_readable($file) and $ext === 'md')
    $body = Markdown(file_get_contents($file));
else
    $body = '<p>cannot read file</p>';

header('Content-Type: text/html;');
echo '<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
    <title>Markdown Test</title>
  </head>
  <body>
' .
$body
. '  </body>
</html>
';
```

[追記]　下のリンクはapacheからnginxに変えたうえ、docker内に作り直し、ドメインを登録し、httpsにしたのでアクセスできません。
※[実際のリンク](http://153.121.55.158/markdown/さくらのvpsを弄ってみた話.md)