mezzanine デプロイまとめ

投稿者: admin | 3 年, 4 ヶ月 前 |

このサイトは一般的なCMSワードプレスではなく、mezzanineというものを使用しています。このサイト立ち上げる(デプロイ)するのにかなり苦労したので(まるまる一か月!!)、サイトのコンセプトとは離れますが、備忘録的にやり方を整理しておきます。いつかまた逢う日に備えて。--一つだけ確実なことは英語できなかったら絶対できてなかった。。

  1. プロジェクトの作成 
    mezzanine-project xxxxxx .  
    最後のドットを忘るべからず。これがあればネストされない。このためにどれだけ苦労したか。。。テーマをインストールするには
    $ cd xxxxxx
    $ python manage.py createdb
    $ python manage.py runserve
    $ python manage.py collecttemplates
    
    ここまでやってからテーマをフォルダに突っ込み、install_appに追加(参考) すべてvirtualenv環境で。djangoのconfが共通で使用されるのを防ぐ。
  2. cygwin インストール (window → Linuxのファイル移動ができないため) --rsyncをインストール
  3. fabricファイルの編集  
    FABRIC = {
    "DEPLOY_TOOL": "rsync", # Deploy with "git", "hg", or "rsync"
    "SSH_USER": "xxxxxx", # VPS SSH username
    "SSH_PASS": "xxxxx", # SSH password (consider key-based authentication)
    "SSH_KEY_PATH": "~/.ssh/xxxxxxxx.pem",
    "HOSTS": ["xxxxxxxxxxx"], # The IP address of your VPS
    "DOMAINS": ["eng-image-learning.com"], # Will be used as ALLOWED_HOSTS in production
    "REQUIREMENTS_PATH": "requirements.txt", # Project's pip requirements
    "PROJECT_NAME": "xxxxxxxx", # Unique identifier for project
    "GUNICORN_PORT": 8000, # Port gunicorn will listen on
    "LOCALE": "en_US.UTF-8", # Should end with ".UTF-8"
    "DB_PASS": "xxxxxxxxxxxx", # サーバー側のDBパスワード プロジェクト名がユーザー名になっている pgadmin4を使ってアクセスするときに使用
    "ADMIN_PASS": "xxxxxxxxxxxx", # ユーザー名:adminとこのPWで管理画面にアクセスできる
    "SECRET_KEY": SECRET_KEY,
    "NEVERCACHE_KEY": NEVERCACHE_KEY,
    }
    xxxxxxの部分を記入。ssh_key_passの設定がみそ。これに気が付くの3日はかかったかな(汗)実際の置く場所はここ C:\cygwin64\home\user\.ssh
  4. 当然公開鍵はサーバー側においておく。この辺りはdjangoと変わりない。サーバー周りの設定は割と書いてあるので他に任せよう。ubuntuは18を使用。これじゃないとpipが動かない。
  5. fab all ⇔ fab removeで何回でもやり直しがきく。これを知る前はサーバーを作っては壊しをしていてかなり消耗した。
  6. fabric.py のlocal_dirがLinuxベースで書かれているので、
    /cygdrive/c/Users/user/Desktop....
    のように書き換えておく。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のすべてを手に入れた。
  7. とはいえ、まだまだ設定は続く。開発側のdbコンテンツを移行するためにdumpファイルを作る。ローカル側で 
    python manage.py dumpdata --exclude admin --natural-foreign --natural-primary -e contenttypes -e auth.Permission --indent 4 > db4.json
    これで開発のDBがjson形式でdumpされる。これをサーバー側に投げるわけだが、簡単にサーバーにアクセスできる方法をがあった。cyberduck。
  8. 取り込むのは簡単。次はSSL化。
    sudo mkdir -p /var/www/letsencrypt
    sudo chown (ssh_user):(ssh_user) /var/www/letsencrypt

    nginxのsite-enableのファイルを書き加える
    location ^~ /.well-known/acme-challenge/ {
        allow all;  
        root /var/www/letsencrypt/;
        default_type "text/plain";  
        try_files $uri =404;  
        }
  9.  更新の設定
    $sudo crontab -e
    00 09 1 * * /usr/bin/certbot renew -q --renew-hook "/bin/systemctl reload nginx"

これですべてOK。オウンドメディアを獲得。ようやくスタートが切れました。

現在未評価