2015年7月9日 星期四

docker centos:7 安裝LNMP

啟動docker
docker run -t -i -p 5566:80 xxx/centos7:latest bash

安裝Nginx 

新增CentOS 7 的Ngnix yum repository ,因為Ngnix 不直接由CentOS提供
$ sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
ps. 如果是CentOS 6 則安裝 epel repository ( CentOS )
$ sudo yum install epel-release
安裝ngnix
$ sudo yum install nginx

啟動php-fpm
# php-fpm

啟動ngnix
因為CentOS 7已不使用service啟動服務,而使用systemctl start <service> , 且使用systemctl 啟動服務時會報錯
# systemctl restart nginx
Failed to get D-Bus connection: No connection to service manager.
原因:
https://github.com/docker/docker/issues/7459#issuecomment-52327775
大意是說:
在container內必須使用程式本身的管理工具去啟動。systemctl不會作用。
ex.
啟動nginx
# nginx
停止nginx
# nginx -s stop
啟動mysql(MariaDB)
切換成mysql使用者
# su mysql
This account is currently not available.
解決mysql使用者不能使用
# vim /etc/passwd
mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin  =>
mysql:x:27:27:MariaDB Server:/var/lib/mysql:/bin/bash
重新登陸
# su mysql
啟動mysql
$ cd /usr/libexec/
$ ./mysqld
報錯:
...
151023 10:27:11 [ERROR] mysqld: File '/var/lib/mysql/aria_log_control' not found (Errcode: 13)
原來是aria_log_control這隻檔案有問題
# ls /var/lib/mysql/aria_log_control -l
-rw-rw---- 1 root root 52 Jul  8 10:33 /var/lib/mysql/aria_log_control
把它刪掉
# rm /var/lib/mysql/aria_log_control

再度重啟mysql
$ ./mysqld
報錯:
...
151023 10:36:27 [ERROR] mysqld: Can't create/write to file '/var/lib/mysql/aria_log.00000001' (Errcode: 13)
一樣是權限問題
# ls /var/lib/mysql/aria_log.00000001 -l
-rw-rw----  1 root  root     16384 Jul  8 10:33 aria_log.00000001
更變權限
# cd /var/lib/
# chown mysql:mysql -R mysql/
啟動mysql(成功)
$ ./mysqld

停止mysql
# mysqladmin shutdown

MySQL停止的方法
http://stackoverflow.com/questions/11091414/how-to-stop-mysqld
$ /usr/local/mysql/bin/mysqladmin -u root -p shutdown

$ sudo mysqld stop

$ sudo /usr/local/mysql/bin/mysqld stop

$ sudo mysql.server stop

php頁面打不開(連結變成下載php檔案) [ 與 nginx vhost配置 類似問題 ]
在 /etc/nginx/conf.d/default.conf 中server{}區塊解除註解這一段,並修改
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
    #root           html;
    root /usr/share/nginx/html;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    #fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    fastcgi_param   SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;
}
如果上面那段root和fastcgi_param 維持原值任一一個沒改,頁面會出現File not found,nginx error log會報下面錯誤
2015/11/16 09:08:00 [error] 941#0: *1 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 192.168.x.x, server: localhost, request: "GET /info.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "192.168.x.x:5566"


請勿解除註解下面這一段
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
#    proxy_pass   http://127.0.0.1;
#}
不然會報錯
2015/11/16 08:22:55 [alert] 837#0: 1024 worker_connections are not enough
2015/11/16 08:22:55 [error] 837#0: *1022 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 127.0.0.1, server: localhost, request: "GET /info.php HTTP/1.0", upstream: "http://127.0.0.1:80/info.php", host: "127.0.0.1"


最後瀏覽器打開
http://192.168.x.x:5566/
就能訪問你docker上的php程式了




參考資料:
https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-on-centos-7  # How To Install Linux, Nginx, MySQL, PHP (LEMP) stack On CentOS 7
https://bbs.archlinux.org/viewtopic.php?id=160277 [SOLVED] Cannot start mysqld after switching to MariaDB
https://mariadb.com/kb/en/mariadb/problem-while-starting-mariadb-server/ problem while starting mariadb server?
http://www.ahlinux.com/nginx/4936.html  nginx fastcgi错误primary script unknown如何解决
http://serverfault.com/questions/406158/nginx-php5-fpm-file-not-found  Nginx + php5-fpm = “File not found”






2015年7月8日 星期三

ubuntu 安裝docker

系統 ubuntu 14.04

透過系統內建套件安裝
$ sudo apt-get update
$ sudo apt-get install -y docker.io
$ sudo ln -sf /usr/bin/docker.io /usr/local/bin/docker
$ sudo sed -i '$acomplete -F _docker docker' /etc/bash_completion.d/docker.io

透過Docker 套件庫安裝最新版本
$ sudo apt-get install apt-transport-https
$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
$ sudo bash -c "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list"
$ sudo apt-get update
$ sudo apt-get install -y lxc-docker

快速安裝法(建議使用)
$ curl -sSL https://get.docker.com/ubuntu/ | sudo sh

ps. 我是使用上面比較麻煩的方法安裝的

參考資料:
http://philipzheng.gitbooks.io/docker_practice/content/install/ubuntu.html

2015年7月1日 星期三

Java MVC Spring 配置

系統:64-bit Win 7 

使用apache-tomcat和 war檔案

1. 安裝jdk ( jdk1.8.0_45  )
到 http://www.oracle.com/index.html ( Downloads -> Popular Downloads -> Java for Developers -> Java Platform (JDK) 8u45 )

下載 jdk-8u45-windows-x64.exe 並安裝

2. 設定java路徑
我的電腦>右鍵內容>進階系統設定> 「進階」頁籤>環境變數 ( 我加在上面的使用者變數 )
JAVA_HOME                   C:\Program Files\Java\jdk1.8.0_45   (JDK所在位置)
CLASSPATH                    C:\Program Files\Java\jdk1.8.0_45\lib
CATALINA_HOME           E:\www\apache-tomcat-7.0.62              (tomcat所在位置)
Path                                      (原本的內容);C:\Program Files\Java\jdk1.8.0_45\bin (以分號隔開,可以不設,不設cmd.exe沒javac可以用,但可以用java)

3. 安裝 apache-tomcat
http://tomcat.apache.org/download-70.cgi 下載 64-bit Windows zip ( apache-tomcat-7.0.62-windows-x64.zip )
注意:我這裡使用zip檔,而非安裝檔
解壓縮即完成安裝,假設解壓縮到E:\www 下

4. 啟動apache-tomcat服務
打開命令行
E:\www\apache-tomcat-7.0.62\bin>startup.bat
即可透過 http://localhost:8080/ 訪問Apache Tomcat

將war檔,如test.war放到webapps資料夾下,即可以 http://localhost:8080/test 訪問該專案,war檔會自動解壓出test資料夾

5. 配置Tomcat的管理密碼 ( 可略 )
編輯 conf/tomcat-users.xml 加入
<role rolename="manager-gui"/>
<user username="tomcat" password="tomcat" roles="manager-gui"/>
角色:
manager-gui - allows access to the HTML GUI and the status pages
manager-script - allows access to the text interface and the status pages
manager-jmx - allows access to the JMX proxy and the status pages
manager-status - allows access to the status pages only


優點:
不用安裝eclipse
缺點:
需每次都從svn上下載最新的war檔,因為svn沒有上傳 project\WEB-INF\classes 這個被java 編譯過的class檔案

使用eclipse跑tomcat

1. 下載eclipse ( Eclipse IDE for Java EE Developers )後解壓縮
2. 拉下svn專案(我是在win7上用cygwin的git-svn拉)
$ git svn clone http://192.168.169.xxx:18080/svn/webchatp/trunk/ webchatp
3. 打開eclipse IDE
4. 新增tomcat Server
5. 選 Apache的Tomcat v7.0 Server

6. 配置Tomcat 的路徑和JRE

看到eclipse面板有這些變化代表配置成功

剛剛配置好的Tomcat Server上按右鍵 -> Add and Remove
將專案加入到configured:



7. 把剛剛從svn拉下的專案新增到eclipse裡
File -> Import-> Existing Projects into Workspace

8. 配置目錄( Select root directory )

9. 設定Java Build Path
專案右鍵-> Properties
修改Libraries紅色出錯的地方


Add External JARs -> E:\www\apache-tomcat-7.0.62\lib\servlet-api.jar
10. 啟動Tomcat
啟動成功的狀態:
最後打開 http://localhost:8080/webchatp/ 即可訪問

ps. 刷頁面後 git status可以發現 build/classes/ 下的編譯後的class檔案改變了


優點:
可以直接拉svn檔案配置

參考資料:
http://yuchun0912.pixnet.net/blog/post/50484643-tomcat-7.x---%E5%AE%89%E8%A3%9D