ApacheでSSL化したサイトから内部で動くWebSocketに接続がしたい。
対処療法的な対策をしたので正しいかどうかはわかりませんがちゃんと動作させるまでできました。
設定的にはこの記事の続きです。
サーバ環境:Ubuntu16.04 Apache/2.4.34
ApacheでSSL化したサイトから内部で動くWebSocketに接続がしたい。
対処療法的な対策をしたので正しいかどうかはわかりませんがちゃんと動作させるまでできました。
設定的にはこの記事の続きです。
サーバ環境:Ubuntu16.04 Apache/2.4.34
ウェブサービスを作る際、コンテンツをすべて含んだHTMLを返すと反応が遅くなったり、定期的に一部を更新する場合に非同期で更新を行うことを考えます。
どちらにしようかなと思ったので特徴を見て比べてみます。
websocketを使ってサーバーとの相互通信をしたい。
gin-gonic/gin と gorilla/websocket を使って動作確認してみます。GolangのWebパッケージginを用いて作ったWEBアプリをLinuxサーバーで公開するためのメモ。ポートとかの話の続きです。
今回はアプリ永続化のための部分。
一度実行したらアップデートなどで止めるまで動き続けてくれるようにします。
Linux環境: Ubuntu 16.04.5bitnamiのwordpressが動いているサーバーにgolangのWEBサービスを追加します。
アプリ自体は8080ポートで実行してサブディレクトリにマップする形です。
Apacheで他WEBサーバーを動かす場合も同様のやり方で行けると思います。
template/htmlを使ってHTML表示を行う時、テンプレートの一部の表示方法を変えたいときがあります。
変えたい部分だけ変えたテンプレートを複数用意する方法もありますが、面倒というか煩雑になるのでパース部分に直接HTMLタグを書いて変更させたい。
そのままやるとタグ部分が文字列になったのでその対策方法メモ。
Execute部分などはgin-gonic/ginを使っているので省略。
ginでシングルバイナリからファイルサーブすることを考えた。
用途を考えるとシングルバイナリ化する利点はあまりないこともあり、標準メソッドだけではできなかったので実装メモです。
以前に書いた記事も参考にした。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
//パッケージのインストール //statikコマンドを使えるようになる go get github.com/rakyll/statik //assetフォルダをgoファイル化する statik asset ... import ( "github.com/rakyll/statik/fs" _ "projectname/statik" // TODO: Replace with the absolute import path ) ... |
http.FileSystem
として扱えるようになる。
ファイルシステムの静的ファイルをサーブできるメソッド。
1 2 3 4 5 6 |
statikFS, err := fs.New() if err != nil { log.Fatal(err) } r:= gin.Default() r.StaticFS("/asset", statikFS) |
これが一番簡単だけどルートアクセスに設定できません。
ミドルウェアを使うことでルートに設定可能です。
1 |
r.Use(static.Serve("/", static.LocalFile("./assets", true))) |
これをstatikで使えるようにします。
Serve
の第2引数はServeFileSystem
なのでインターフェースを満たす必要がある。
1 2 3 4 |
type ServeFileSystem interface { http.FileSystem Exists(prefix string, path string) bool } |
Exists
メソッドが必要そうなのでミドルウェアの実装から必要なものを抜き出して実装してみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
type statikFileSystem struct { fs http.FileSystem } func (b *statikFileSystem) Open(name string) (http.File, error) { return b.fs.Open(name) } func (b *statikFileSystem) Exists(prefix string, filepath string) bool { if _, err := b.fs.Open(filepath); err != nil { return false } return true } func StatikFileSystem(fs http.FileSystem) *statikFileSystem{ return &statikFileSystem{ fs, } } |
1 |
r.Use(static.Serve("/", StatikFileSystem(statikFS))) |
これでルートからでもファイルサーブできるようになった。
HTMLヘッダ内のメタタグ(<meta name="" content="">
)を編集(ない場合は作成も)をするスクリプトを書いてみました。
以前にOGPなどの外部表示設定を確認したのでスクリプトで動的に変えてみたかったのが理由です。
ただツイッターなどのサービスではOGPのためのアクセスでスクリプト実行までしてなさそうなので、サーバーサイドで書き換える必要があります。
なので今回のスクリプトはnode.js向け、あるいはタイトルのみの編集向けです。
Reactアプリ内でjQueryプラグインのDataTables.jsを使うためのメモ。
ReactとjQueryはあまり相性が良くないので$
は最低限使うだけです。
合わせて使う方法からコンポーネント化まで。