よしだです

プログラミングの勉強してます

さくらVPNでApache2にアクセスできなかった話

個人サービスを作ろうと思い立ち、とりあえずさくらVPNを契約してWebサーバを準備しようとしたのだけど、ubuntuでapache2をインストールしてもブラウザからアクセスができない。



このままでは困っちゃうのでグーグル先生に聞いてみると、どうやらiptablesというのが適切に設定できていないのが原因っぽかった。


iptablesっていうのは平たくいうとFirewallみたいなものらしく、ちゃんとiptablesでアクセス許可をしてあげないとブラウザからアクセスできないみたい。


さくらVPNではこれを手動で設定してあげなければいけないようなので、設定。

sudo vi /etc/iptables/iptables.rules

こうして

*filter
INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT

-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

80と443のportを許可してあげる。

sudo /sbin/iptables-restore < /etc/iptables/iptables.rules

設定を反映して

sudo service apache2 restart

apacheを再起動すればおっけー



無事繋がりました。

f:id:yoshida_ahiru:20171009154138p:plain




参考にさせていただいたサイト
さくらVPS Ubuntu Apache2が接続できない!
iptables まとめ - Qiita

Djangoのサーバーにホスト名で弾かれる

pythonの環境構築が無事に終了し、

django-admin startproject mysite

でアプリを作り

python manage.py runserver 192.168.33.10:8000

でサーバーを起動しアクセスしたところ

Starting development server at http://192.168.33.10:8080/
Quit the server with CONTROL-C.
Invalid HTTP_HOST header: '192.168.33.10:8000'. You may need to add '192.168.33.10' to ALLOWED_HOSTS.
[12/Aug/2017 15:22:28] "GET / HTTP/1.1" 400 62972

というエラーが発生・・・。 ALLOWED_HOSTSにホストを追加しなさいよと怒られてしまった。

ALLOWED_HOSTSって何ぞやと思い調べると、どうやらsettings.pyに存在する変数らしい。 なので、mysite/settings.pyに

ALLOWED_HOSTS = ['192.168.33.10']

の一文を追加してサーバーを再起動。

無事に接続できました。

pythonにsqlite3が無いと怒られる

djangoのインストールが終わったので早速チュートリアルをやろうとしたら、変なエラーが出る。

Traceback (most recent call last):
  File "/home/vagrant/.virtualenvs/django/lib/python3.6/site-packages/django/db/backends/sqlite3/base.py", line 33, in <module>
    from sqlite3 import dbapi2 as Database
  File "/usr/local/bin/python-3.6.2/lib/python3.6/sqlite3/__init__.py", line 23, in <module>
    from sqlite3.dbapi2 import *
  File "/usr/local/bin/python-3.6.2/lib/python3.6/sqlite3/dbapi2.py", line 27, in <module>
    from _sqlite3 import *
ModuleNotFoundError: No module named '_sqlite3'

どうやらsqlite3が無いらしい・・・。

調べてみると、Pythonをソースからコンパイルして導入した場合、sqliteとかは自力でインストールしないとダメらしい。

なので、インストールします。

pip install sqlite3 libsqlite3-dev libsqlite3
python
>>> import sqlite3

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/bin/python-3.6.2/lib/python3.6/sqlite3/__init__.py", line 23, in <module>
    from sqlite3.dbapi2 import *
  File "/usr/local/bin/python-3.6.2/lib/python3.6/sqlite3/dbapi2.py", line 27, in <module>
    from _sqlite3 import *
ModuleNotFoundError: No module named '_sqlite3'

ダメやんけ!

どうやら、コンパイル前にインストール済みじゃ無いとダメらしいです。

仕方ないのでpython削除 ついでに今のうちに他にも必要そうなpackageをインストール

sudo rm -rf /usr/local/bin/python-3.6.2
sudo apt-get -y install build-essential libsqlite3-dev libreadline6-dev libgdbm-dev zlib1g-dev zlibbz2-dev sqlite3 tk-dev zip libssl-dev gfortran liblapack-dev

コンパイルし直し

sudo wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tgz
tar xvzf Python-3.6.2.tgz
cd Python-3.6.2
./configure --prefix=/usr/local/bin/python-3.6.2
make
sudo make install

なんとかなりました。 これでやっとDjangoに触れる・・・。

Python2.6でvirtualenvwrapper.shにエラーが出る

Pythonを覚えようと思い、とりあえず環境構築だーということでVagrant上でvirtualenvをインストール。

すると、途中でこんなエラーが出てうまくいかない。

Traceback (most recent call last):
  File "/usr/lib64/python2.6/runpy.py", line 122, in _run_module_as_main
    "__main__", fname, loader, pkg_name)
  File "/usr/lib64/python2.6/runpy.py", line 34, in _run_code
    exec code in run_globals
  File "/usr/lib/python2.6/site-packages/virtualenvwrapper/hook_loader.py", line 16, in <module>
    from stevedore import ExtensionManager
  File "/usr/lib/python2.6/site-packages/stevedore/__init__.py", line 23, in <module>
    LOG.addHandler(logging.NullHandler())
AttributeError: 'module' object has no attribute 'NullHandler'
virtualenvwrapper.sh: There was a problem running the initialization hooks.

If Python could not import the module virtualenvwrapper.hook_loader,
check that virtualenvwrapper has been installed for
VIRTUALENVWRAPPER_PYTHON=/usr/bin/python and that PATH is
set properly.

エラーを読むとここが問題っぽそうだな

AttributeError: 'module' object has no attribute 'NullHandler'

ということで調べてみると、

https://bitbucket.org/virtualenvwrapper/virtualenvwrapper/issues/289/missing-nullhandler-on-python-26

こんなものを発見。

どうやらPython2.6ではNullHandlerとかいうものはサポートされていないらしい。 とはいえ、システムのPythonのバージョンは変えたくないので、

sudo vi /usr/lib/python2.6/site-packages/virtualenvwrapper/hook_loader.py

ソースコードを書き換え。

importの下に、リンク先にあるコードをコピペ。

import inspect
import itertools
import logging
import logging.handlers
import optparse
import os
import sys

try: 
    from logging import NullHandler
except ImportError:
    class NullHandler(logging.Handler):
        def emit(self, record):
            pass
    logging.NullHandler = NullHandler

これで無事に動きました。

githubのcommit履歴を消したい

githubにpushしてから、パスワードとかベタ貼りのファイルをpushしてしまったことに気づいたので慌ててcommit履歴を消しました。


手順

①消したいファイルをコピーしてバックアップを取る
cp file_path コピー先のpath
②commit履歴を消す
git filter-branch -f --index-filter 'git rm --ignore-unmatch ファイルのpath' HEAD
③バックアップしたファイルを戻す
mv file_path 移動先のpath
githubにpush
git push -f origin master

これでcommit履歴が消えてます。

vagrantからgithubにpushしようとしたら出来なかった

error: The requested URL returned error: 403 Forbidden while accessing https://github.com/YAhiru/ticket_reserve.git/info/refs

fatal: HTTP request failed

ってエラーが出たんで
その対処法

git remote set-url origin https://YAhiru@github.com/YAhiru/ticket_reserve.git/info/refs


これで無事git push origin masterができました。