CentOS7にFFMpeg4をインストールする
CentOS7にFFMpeg4をインストールする記事はちょこちょこあるものの、上手く入らないことが多いのでちゃんと入った方法を残しておく。
環境
Service | Version |
---|---|
CentOS | 7.5 |
リポジトリの追加
2020.09.08 リポジトリがSSL対応したようなので修正
$ yum-config-manager --add-repo=https://negativo17.org/repos/epel-multimedia.repo $ yum-config-manager --disable epel-multimedia
インストール
$ yum install --enablerepo=epel-multimedia ffmpeg ffmpeg-devel
確認
$ ffmpeg ffmpeg version 4.1.4 Copyright (c) 2000-2019 the FFmpeg developers
ソースインストールのPHPにImageMagickをインストールする
インストール
必要なパッケージをインストールしてimagickをインストール
$ sudo yum install autoconf ImageMagick ImageMagick-devel $ cd /usr/local/php/current/bin $ sudo ./pecl install imagick
php.iniに追記
/usr/local/php/current/lib/php.ini
extension="imagick.so"
確認
$ php -m | grep imagick
Laravel mixのVue.jsをTypeScriptにしていく
はじめに
Node.js案件でTypeScriptを使ったところ便利すぎてほれ込んだので、Laravel mixで使っていたvueもTypeScript化していく事に。
とはいえ新規案件ならともかく既にある程度の大きさになっているので少しずつTypeScript化していく。
前提
Service | Ver |
---|---|
Laravel | 5.7 |
Vue.js | 2.6.10 |
TypeScript | 3.5.3 |
npm | 6.9 |
必要なパッケージのインストール
$ npm install --save-dev ts-loader typescript vue-property-decorator babel-plugin-syntax-object-rest-spread
必要な追加ファイルをそろえる
ルートディレクトリに以下を追加。
オプションなどは適宜自由に変えてください。
tsconfig.json
{ "compilerOptions": { "module": "commonjs", "target": "es5", "noUnusedLocals": true, "noUnusedParameters": true, "noFallthroughCasesInSwitch": true, "inlineSourceMap": true, "experimentalDecorators": true, "emitDecoratorMetadata": true, "allowSyntheticDefaultImports": true, "declaration": false, "lib": [ "dom", "es2015" ] }, "include": [ "resources/assets/js/**/*" ], "exclude": ["node_modules"] }
.babelrc
{ "env": { "test": { "presets": [ ["env", { "targets": { "node": "current" } }] ] }, "development": { "presets": [ ["env", { "modules": false, "targets": { "browsers": "> 2%", "uglify": true } }] ] }, "production": { "presets": [ ["env", { "modules": false, "targets": { "browsers": "> 2%", "uglify": true } }] ] } }, "plugins": ["syntax-object-rest-spread"] }
Vue.jsのTypeScript定義ファイルの用意
適当な場所にディレクトリを切って定義ファイルを用意。
resources/assets/js/types/index.d.ts
declare module '*.vue' { import Vue from 'vue' export default Vue }
webpack.mix.jsの編集
webpack.mix.js
-mix.js('resources/assets/js/app.js', 'public/js') +mix.ts('resources/assets/js/app.ts', 'public/js') mix.webpackConfig({ resolve: { extensions: [".js", ".jsx", ".vue", ".ts", ".tsx"], alias: { 'vue$': 'vue/dist/vue.esm.js', } }, module: { rules: [ { test: /\.tsx?$/, loader: "ts-loader", options: { appendTsSuffixTo: [/\.vue$/] }, exclude: /node_modules/ } ] } })
app.jsをapp.tsへ
resources/assets/js/app.js
-> resources/assets/js/app.ts
import Vue from 'vue' import router from './router' /** * Next, we will create a fresh Vue application instance and attach it to * the page. Then, you may begin adding components to this application * or customize the JavaScript scaffolding to fit your unique needs. */ import component from './pages/App.vue' Vue.component('App', component) const app: any = new Vue({ router }) app.$mount('#app')
しれっと vue-router
をインストールしてますが、まあ気にしないでください。
実際に稼働中の物をts化していく際は、const hoge: any = require('./hoge')
みたいな感じで全部 any
で定義すればとりあえず動きます。そして後でゆっくりTypeScript化していってくださいな。
Let's Compile!!
$ npm run dev
これで動かなかったらエラーいっぱい出ます。
いっぱい出たらググって解消していってください。
私がTypeScript化した時に出たエラーが何だったか覚えてないです。。。(何のためのこのブログ)
一応覚えている限り、 ts-loader
のバージョンが新しすぎて怒られたので戻した案件もありました。
でもほぼ同条件なのに怒られないものもあるので不思議。いろいろ勉強しなきゃ。。。
おわり
以上でTypeScript化完了です。
実際に開発をするなら eslint
なども入れていくとは思いますし、ComponentやVuexもTypeScriptしていくわけですが、そのあたりは気が向いたらいずれ別の記事で。
(本業はサーバーサイドなのであんまり記事にしないと思う。。。)
さくらVPSで建てたApache2.4にに外部から接続が出来なかった件
はじめに
WEBサーバーとして利用していたさくらVPSのサーバーのOSをクリーンインストールしてCentOS7を入れることに。
さくさくっとサービスを立てていき、いざ外部から接続テストをしてみると繋がらない。
今まで何度もさくらVPSでWEBサーバーは立てているのに、こんなことは初めて!と調査やら試行錯誤で半日くらい使ってしまったお話。。。
TL;DR
2019年6月27日からパケットフィルタが提供開始されていた。
OSインストール時にデフォルトSSH(22)だけ許可で有効になる模様。
調査
サービスがたっているか確認
$ ps aux | grep httpd root 19113 0.0 0.7 170676 7616 ? Ss 16:28 0:00 /usr/local/apache2/v2.4.39/bin/httpd -k start
ふむ。ある。
ポートが空いているか確認
$ netstat -ant tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN
空いてる。
Firewalldの停止
$ systemctl status firewalld Active: inactive (dead)
止まっている。
(後で元に戻すのを忘れないように。)
なぜ外部から繋がらないのー!?
解決
普段ならここまで確認すればもう繋がっている。
という事はそもそもサーバーへの接続が届いていないのでは?と思い、VPSの管理画面を眺めていたら パケットフィルタ
の文字が。
これやん。。。ナニコレ今までなかったよね。。。
という事でパケットフィルタで80番と443番ポートを許可して無事解決。
サーバーの管理画面とかめったに見ないよー!そんなの知らないよー!
Muninのログファイルが肥大化
Muninを眺めているとディスクの使用量が一カ月で50%を超える緊急事態に。
放置していれば来月にはディスクがパンパンで動かなくなるので調べてみたらMuninのログファイルがやったら目ったら大きい。。。
Munin見て気付いた結果「原因お前かよ!」といったお気持ち。
調査
調査も何も
$ du -sh /var/log/munin
と打つとやたら大きい。
どうやらログのローテートが動いていないという事で手動でローテートしてみる。
$ sudo logrotate -f /etc/logrotate.d/munin error: skipping "/var/log/munin/munin-graph.log" because parent directory has insecure permissions (It's world writable or writable by group which is not "root") Set "su" directive in config file to tell logrotate which user/group should be used for rotation.
結果
どうやら親ディレクトリのパーミッションでグループに書き込み権限があると怒られるらしい。
確かにapacheのアクセスを許可したかったので Userはmunin
Groupは httpd
でグループに書き込み権限を与えている。
そこで
$ sudo chmod g-w /var/log/munin
もしくは
$ sudo chmod 750 /var/log/munin
で解決。
とするとapacheで問題が発生したりしたら面倒なので(検証しろ)、ローテート側を変更することに。
/etc/logrotate.d/munin
/var/log/munin/munin-graph.log { su munin daemon daily rotate 7 missingok notifempty compress }
su munin daemon
親と同じUserとGroupにして完了。
ソースインストールのApacheにモジュールを追加する
今回はwebsocketのリバースプロキシとしてApacheを使いたかったので、mod_proxy_wstunnel
をインストールする。
mod_soの確認
Apacheに後からモジュールを追加するためのモジュールが存在するかを確認する。
入っていない場合はApacheを再インストールする必要があるので、その際に必要なモジュールを追加してください。
$ /usr/local/apache2/bin/httpd -l | grep mod_so.c
インストールするモジュールの確認
Apacheをインストールした時のファイルにモジュールのソースファイルが沿内するか確認する。
もしソースファイルが無い場合は Apache のサイトからダウンロードしてください。
$ ll /usr/local/src/httpd-2.4.xx/modules/proxy/mod_proxy_wstunnel.c
コンパイル
apxsコマンドを使って追加したいモジュールをビルドする。
$ cd /usr/local/src/httpd-2.4.xx/modules/proxy $ /usr/local/apache2/bin/apxs -c -i -a mod_proxy_wstunnel.c
オプション | 説明 |
---|---|
-c | コンパイル |
-i | インストール |
-a | httpd.confにLoadModule行を追加して有効化する |
以上です。
CentOS7にDKIM設定をして迷惑メール対策
初めに
{}
内は適宜環境に合わせて読み替えてください。
環境
CentOS7.6 + Postfix 2.10.1
OpenDKIMのインストール
$ yum install --enablerepo=epel opendkim
暗号化キーの作成
$ mkdir /etc/opendkim/keys/{DOMAINNAME.com} $ opendkim-genkey -D /etc/opendkim/keys/{DOMAINNAME.com}/ -b 1024 -d {MYDOMAIN.com} -s default
各オプションについて
オプション | 内容 |
---|---|
-D | 生成ディレクトリ |
-b | 鍵のビット長。1024や2048などお好きに。 |
-d | ドメイン名 |
-s | セレクタ名。自分が分かりやすいようにお好きに。 |
オーナーの変更
これを忘れて私は後でエラーになりました。
$ chown -R opendkim: /etc/opendkim
OpenDKIM Configファイルの設定
/etc/opendkim.conf
Mode sv
#KeyFile /etc/opendkim/keys/default.private
KeyTable /etc/opendkim/KeyTable
SigningTable refile:/etc/opendkim/SigningTable
ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
InternalHosts refile:/etc/opendkim/TrustedHosts
/etc/opendkim/KeyTable
default._domainkey.{DOMAN.com} {DOMAN.com}:default:/etc/opendkim/keys/{DOMAN.com}/default.private
/etc/opendkim/TrustedHosts
自サーバーからメールを送信するので特に設定なし
127.0.0.1 ::1
/etc/opendkim/SigningTable
*@{DOMAIN.com} default._domainkey.{DOMAIN.com}
/etc/sysconfig/opendkim
AUTOCREATE_DKIM_KEYS=NO
OpenDKIMの起動
configの設定が完了すればDKIMを起動します。
$ systemctl start opendkim $ systemctl status opendkim
問題なければ完了です。
後は必要に応じて自動起動も設定しておくといいでしょう。
$ systemctl enable opendkim
DNSを更新
利用しているDNSサーバーでTXTゾーンにDKIMの内容を反映させます。
$ cat /etc/opendkim/keys/{DOMAIN.com}/default.txt {DOMAIN.com}._domainkey IN TXT ( "v=DKIM1; k=rsa; " "p=MIGfMA.........." ) ; ----- DKIM key default for {DOMAIN.com}
サブドメイン | 種別 | 内容 |
---|---|---|
default._domainkey.{DOMAIN.com} | A | IPアドレス |
default._domainkey | TXT | v=DKIM1; k=rsa; p=MIGfMA........; |
Postfix Config設定
/etc/postfix/main.cf
smtpd_milters = inet:127.0.0.1:8891 non_smtpd_milters = $smtpd_milters milter_default_action = accept
Postfixを再起動して設定を反映します。
$ systemctl restart postfix
終わり
最後に適当にGmailなりにでもメールを送信してみて、受信側のヘッダに dkim=pass
とかあれば完了です。