Awaken English Power!http://eng-image-learning.com/blog/2024-03-28T01:23:43+00:00~ An English Learner's Esnographymezzanine デプロイまとめ2020-11-11T05:05:49+00:002024-03-28T01:23:43+00:00adminhttp://eng-image-learning.com/blog/author/admin/http://eng-image-learning.com/blog/mezzanine/<p>このサイトは一般的なCMSワードプレスではなく、mezzanineというものを使用しています。このサイト立ち上げる(デプロイ)するのにかなり苦労したので(まるまる一か月!!)、サイトのコンセプトとは離れますが、備忘録的にやり方を整理しておきます。いつかまた逢う日に備えて。--一つだけ確実なことは英語できなかったら絶対できてなかった。。</p>
<p></p>
<ol>
<li>プロジェクトの作成
<pre>mezzanine-project xxxxxx . </pre>
最後のドットを忘るべからず。これがあればネストされない。このためにどれだけ苦労したか。。。テーマをインストールするには
<pre>$ cd xxxxxx
$ python manage.py createdb
$ python manage.py runserve
$ python manage.py collecttemplates
</pre>
ここまでやってからテーマをフォルダに突っ込み、install_appに追加(<a href="https://qiita.com/itkr/items/c6c26f55a292f3e39241">参考</a>) すべてvirtualenv環境で。djangoのconfが共通で使用されるのを防ぐ。</li>
<li>cygwin インストール (window → Linuxのファイル移動ができないため) --rsyncをインストール</li>
<li>fabricファイルの編集
<pre>FABRIC = {<br/> <span>"DEPLOY_TOOL"</span>: <span>"rsync"</span><span>, </span><span># Deploy with "git", "hg", or "rsync"<br/></span><span> </span><span>"SSH_USER"</span>: <span>"xxxxxx"</span><span>, </span><span># VPS SSH username<br/></span><span> </span><span>"SSH_PASS"</span>: <span>"xxxxx"</span><span>, </span><span># SSH password (consider key-based authentication)</span><span><br/></span><span> </span><span>"SSH_KEY_PATH"</span>: <span>"~/.ssh/xxxxxxxx.pem"</span><span>,<br/></span><span> </span><span>"HOSTS"</span>: [<span>"xxxxxxxxxxx"</span>]<span>, </span><span># The IP address of your VPS<br/></span><span> </span><span>"DOMAINS"</span>: [<span>"eng-image-learning.com"</span>]<span>, </span><span># Will be used as ALLOWED_HOSTS in production<br/></span><span> </span><span>"REQUIREMENTS_PATH"</span>: <span>"requirements.txt"</span><span>, </span><span># Project's pip requirements<br/></span><span> </span><span>"PROJECT_NAME"</span>: <span>"xxxxxxxx"</span><span>, </span><span># Unique identifier for project<br/></span><span> </span><span>"GUNICORN_PORT"</span>: <span>8000</span><span>, </span><span># Port gunicorn will listen on<br/></span><span> </span><span>"LOCALE"</span>: <span>"en_US.UTF-8"</span><span>, </span><span># Should end with ".UTF-8"<br/></span><span> </span><span>"DB_PASS"</span>: <span>"xxxxxxxxxxxx"</span><span>, </span><span># サーバー側のDBパスワード プロジェクト名がユーザー名になっている pgadmin4を使ってアクセスするときに使用<br/></span><span> </span><span>"ADMIN_PASS"</span>: <span>"xxxxxxxxxxxx"</span><span>, </span><span># ユーザー名:adminとこのPWで管理画面にアクセスできる<br/></span><span> </span><span>"SECRET_KEY"</span>: SECRET_KEY<span>,<br/></span><span> </span><span>"NEVERCACHE_KEY"</span>: NEVERCACHE_KEY<span>,<br/></span>}</pre>
xxxxxxの部分を記入。ssh_key_passの設定がみそ。これに気が付くの3日はかかったかな(汗)実際の置く場所はここ C:\cygwin64\home\user\.ssh</li>
<li>当然公開鍵はサーバー側においておく。この辺りはdjangoと変わりない。サーバー周りの設定は割と書いてあるので他に任せよう。ubuntuは18を使用。これじゃないとpipが動かない。</li>
<li>fab all ⇔ fab removeで何回でもやり直しがきく。これを知る前はサーバーを作っては壊しをしていてかなり消耗した。</li>
<li>fabric.py のlocal_dirがLinuxベースで書かれているので、
<pre><span>/cygdrive/c/Users/user/Desktop</span>....</pre>
のように書き換えておく。fabricで書き換えるのはこの部分だけ(多分)。1のプロジェクト作成でドットをしていなければ、フォルダがプロジェクト名でネストされ、manage.pyやrequirements.txtの位置関係がおかしくなる。エラーが出るたび、envを何度も手直ししたが、結局ドットを入れることですべて解決した。これはdeployコマンドを動かすときも勝手にフォルダを推測して動くため、create()部分がうまくいったところで失敗することになる。 kill -HUPで終了すればすべてOK. かと思いきや502エラーで表示されない。これはnginxがwww-dataでキックされていたのだが、gunicornはssh_userであったため、両者でスターターが一致せずエラーが出ることを突き止めた。nginxのconfファイルのwww-dataをssh_userで書き換えてなんとか表示成功。もはや感動ではなく、感慨深いものがあった。何度もあきらめたり、クラウドワークスに仕事を依頼したりまでしたが、何とかギリギリで踏みとどまった。そして最後にwebのすべてを手に入れた。</li>
<li>とはいえ、まだまだ設定は続く。開発側のdbコンテンツを移行するためにdumpファイルを作る。ローカル側で
<pre>python manage.py dumpdata --exclude admin --natural-foreign --natural-primary -e contenttypes -e auth.Permission --indent 4 > db4.json</pre>
これで開発のDBがjson形式でdumpされる。これをサーバー側に投げるわけだが、簡単にサーバーにアクセスできる方法をがあった。cyberduck。</li>
<li>取り込むのは簡単。次はSSL化。
<pre>sudo mkdir -p /var/www/letsencrypt<br/>sudo chown (ssh_user):(ssh_user) /var/www/letsencrypt<br/><br/>nginxのsite-enableのファイルを書き加える<br/>location ^~ /.well-known/acme-challenge/ {<br/> allow all; <br/> root /var/www/letsencrypt/;<br/> default_type "text/plain"; <br/> try_files $uri =404; <br/> } </pre>
</li>
<li>
<pre> 更新の設定<br/>$sudo crontab -e <br/>00 09 1 * * /usr/bin/certbot renew -q --renew-hook "/bin/systemctl reload nginx"</pre>
</li>
</ol>
<p>これですべてOK。オウンドメディアを獲得。ようやくスタートが切れました。</p>
<p></p>
<p></p>