VPSに、VPNとRedmineを入れる
プライベートでRedmineが使いたくなったので、VPSへデプロイしました。
グローバルには公開したくなかったので、VPNもデプロイして設定しました。
そのやり方について今回は書いていきます。
VPSを契約する
今回は、CPU:2core / RAM:1.5GBにしました。
個人でRedmineしか使わないのであれば、1core / 1GBでも足りると思います。
OSを入れる
Dockerを使うので、OSは何でもいいのですが、
Firewallとしてufwが使いたかったので、Ubuntu 16.04を選択しました。
初期設定の方法についての説明は省略します。sshが使える状態まで設定します。
こちらもご参考ください。
raspberry piにlinuxをインストールする - drag n drop
Firewallを設定する
とりあえずsshで使うポートだけ空けておきます。
sudo apt-get install ufw sudo ufw default deny sudo ufw allow 22222 # sshのポートを指定 sudo ufw enable sudo ufw reload
Dockerを入れる
docker run hello-worldが動く状態まで設定します。
Get Docker for Ubuntu - Docker Documentation
VPNを入れる
pritunlというOSSのVPNサーバーソフトを使いました。
このソフトは起動するだけですぐに使えるため便利です。
pritunlは設定データをMongoDBで永続化しているので、
先にMongoDBをデプロイします。
MongoDBを入れる
dockerは、デフォルト設定ではNATネットワークが使われますが、
その設定ではufwでポートをふさぐことができないため、
--net hostにして、Hostネットワークで起動させます。
/etc/localtimeを共有すると、ホストOSとコンテナの時計を同期できます。
docker pull mongo docker run -d \ --name mongo \ --restart always \ --net host \ --volume /etc/localtime:/etc/localtime:ro \ --volume /opt/docker/volume/mongo:/data/db \ mongo
pritunlを入れる
MongoDBのIPを指定して起動させます。
Hostネットワークなので、127.0.0.1を指定することになります。
Hostネットワークでは、--linkは使えないようです。
pritunl set app.redirect_server false で、ポート80の使用を無効にできます。
docker pull fridus/pritunl docker run -d \ --name vpn \ --restart always \ --net host \ --env MONGO_URI=mongodb://127.0.0.1:27017/pritunl \ --volume /etc/localtime:/etc/localtime:ro \ --privileged \ fridus/pritunl /bin/bash -c "pritunl set app.redirect_server false; /start.sh"
VPNの初期設定をする
pritunlはWebUIから設定を行うため、
初期設定の間だけWebUIにログインするためのポートを開放してから、
管理画面にログインします。
pritunlの管理画面の初期ポートは443ですが、後から変えられます。
sudo ufw allow 443 sudo ufw reload
管理者アカウントのIDとパスワードの初期値は、どちらもpritunlになっています。
初期ログイン画面で、ポートとアカウント設定を変えておきます。
管理画面の右上のSettingsで、この設定はいつでも変更可能です。
まず、左上のUsersから、ユーザー管理画面を開きます。
Add Organizationをクリックして、接続グループを作成します。
このグループ名(組織名)は、ユーザーの作成で必要になります。
Add Userをクリックして、接続ユーザーを作成します。
ここで設定するPINコードは、VPNに接続するためのパスワードとなります。
ユーザーの作成が終わったら、ユーザーの横にあるDLアイコンを押して、
ユーザープロファイルのファイルを落としておきます。
このファイルがVPNへの接続で必要になります。
スマホから接続する場合は、DLアイコンの隣の鎖アイコンを押して、
短縮リンクを生成してからスマホのブラウザからアクセスして落とすと便利です。
ちなみに、作成したユーザーごとのQRコードのアイコンをクリックすると、
2段階認証のためのQRコードが表示されるので、
Googleなどの2段階認証アプリと連携させることもできます。
次に、左上のServersから、サーバー管理画面を開きます。
Add Serverをクリックして、VPNサーバーを作成します。
Name, Port, DNS Server を設定すれば、サーバーは作成できます。
Portは、デフォルトとは別のものにしておいたほうがいいと思います。
サーバーの作成が終わったら、Attach Organizationをクリックして、
サーバーに先ほど作成したグループを割り当てます。
この設定によって、サーバーが認証できるユーザーを割り当てることができます。
これで、VPNサーバーの初期設定は終わりです。
サーバー管理画面でStart Serverをクリックすると、VPNサーバーが起動されます。
ここまで設定が終わったら、
管理画面からログアウトして、ポート開放の設定を変更します。
sudo ufw status numbered Status: active To Action From -- ------ ---- [ 1] 22222 ALLOW IN Anywhere [ 2] 443 ALLOW IN Anywhere sudo ufw delete 2 # ルール番号を指定して削除します sudo ufw allow 60001/udp # VPNサーバーに設定したポートを指定します sudo ufw reload
これで、VPNに接続するための準備ができました。
VPNに接続する
接続には専用のクライアントソフトが必要です。
pritunlの公式サイトから落とせます。
OpenVPN対応であれば、公式クライアントでなくても使えるかもしれません。
Pritunl Client - Open Source OpenVPN Client
Androidからは、OpenVPN Connectというアプリで接続できました。
OpenVPN Connect - Google Play の Android アプリ
Android標準で付いているVPN接続機能では、
OpenVPNに対応していないのか、接続できませんでした。
PC用のクライアントソフトでは、
Import Profileでプロファイルデータを選択して、
右上のメニューからConnectをクリックしてPINコードを入れれば接続できます。
Android版のクライアントアプリでは、
右上のメニューからImport -> Import Profile from SD cardで、
プロファイルデータを選択して、UsernameとPasswordを入力して、
Connectをクリックすれば、接続できます。
VPNに接続して以降は、
ポートを開放せずに、VPS上のVPNサーバーの管理画面や、
その他のWebサービスにアクセスできるようになります。
Redmineを入れる
Redmineは、MySQLでデータを永続化しているので、
先にMySQLをデプロイしておきます。
MySQLを入れる
環境変数でrootのパスワードを設定します。
環境変数で設定したくない場合は、別途調べてみてください。
docker pull mysql docker run -d \ --name mysql \ --restart always \ --net host \ --env MYSQL_ROOT_PASSWORD=pAs5w0rd \ --volume /etc/localtime:/etc/localtime:ro \ --volume /opt/docker/volume/mysql/data:/var/lib/mysql \ mysql
MySQLの初期設定をする
Redmineで使用するためのデータベースとユーザーを作成します。
docker exec -it mysql bash mysql -u root -p # utf8でデータベースを作ることで、日本語に対応させます > create database redmine default character set utf8; # ユーザーを作成します > create user redmine identified by 'pa55woRd'; > grant all on redmine.* to 'redmine'; > exit exit
Redmineを入れる
pritunlのときと同様に、127.0.0.1でデータベースを指定して起動させます。
docker pull redmine docker run -d \ --name redmine \ --restart always \ --net host \ --env 'REDMINE_DB_MYSQL=127.0.0.1' \ --env 'REDMINE_DB_DATABASE=redmine' \ --env 'REDMINE_DB_USERNAME=redmine' \ --env 'REDMINE_DB_PASSWORD=pa55woRd' \ --env 'REDMINE_DB_ENCODING=utf8' \ --volume /etc/localtime:/etc/localtime:ro \ --volume /opt/docker/volume/redmine/data:/usr/src/redmine/files \ redmine
これで、ポート3000でRedmineが使える状態になっているはずです。
VPNによるVPSのIPは、ifconfigでtun0-00というinterface名で確認できるはずです。
設定方法は以上です。
Redmineにプラグインを入れる
本題ではありませんが、
Redmineでプラグインを使えるようにする方法についても書いておきます。
docker exec -it redmine bash # プラグインをこのフォルダにインストールします cd plugins wget http://foo.bar/hoge.tar.gz tar xf hoge.tar.gz rm hoge.tar.gz cd .. # プラグインをredmineで使える状態にします RAILS_ENV=production export RAILS_ENV bundle update bundle install bundle exec rake db:migrate bundle exec rake tmp:cache:clear bundle exec rake tmp:sessions:clear bundle exec rake redmine:plugins:migrate exit # redmineを再起動します docker restart redmine
これで、大抵のプラグインは使えるようになるはずです。
おわり!